package Utiles;

import entidades.HistoricoPrecioImpl;
import entidades.ProductoImpl;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.UUID;
import logicaNegocio.Configuracion;
import logicaNegocio.FabricaEntidad;
import persistencia.FachadaPersistencia;
import persistencia.agente.Dia;
import persistencia.agente.EstadoPedido;
import persistencia.agente.EstadoPedidoAgente;
import persistencia.agente.HistoricoPrecio;
import persistencia.agente.HistoricoPrecioAgente;
import persistencia.agente.Producto;
import persistencia.agente.ProductoAgente;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
/**
 *
 * @author Sebastian
 */
public class Utiles {

    public static java.sql.Timestamp convertirATIMESTAMP(Date date) {
        return new java.sql.Timestamp(date.getTime());
    }

    public static Date convertirADate(java.sql.Timestamp timestamp) {
        return new Date(timestamp.getTime());
    }

    /**
     * Devuelve true si la primerFecha es inferior o igual a la fecha actual y 
     * la segundaFecha es superior o igual a la fecha actual. Tambián en caso de que la 
     * segunda fecha sea nula o "" devuelve true 
     * @param primerFecha
     * @param segundaFecha
     * @return 
     */
    public static boolean hoyEstaEntre(Date primerFecha, Date segundaFecha) {
        Date hoy = new Date();
        if (segundaFecha.toString().trim().equals("") || segundaFecha == null) {
            return true;
        } else {
            if (primerFecha.compareTo(hoy) <= 0 && segundaFecha.compareTo(hoy) >= 0) {
                return true;
            } else {
                return false;
            }
        }
    }

    public static Date obtenerFecha(int dia, int mes, int anio) {
        Calendar cal = new GregorianCalendar(anio, mes-1, dia);
        return cal.getTime();
    }

    public static String generarOid() {
        return UUID.randomUUID().toString();
    }

    public static boolean esHoy(Dia dia) {
        int nroDiaHoy;
        Calendar hoy = new GregorianCalendar();
        hoy.setTime(new Date());
        nroDiaHoy = hoy.get(Calendar.DAY_OF_WEEK);
        if (dia.getNroDia() == nroDiaHoy) {
            return true;
        }
        return false;
    }

    public static void cargarEjemplos() {

        EstadoPedidoAgente estadoPedido;
        estadoPedido = (EstadoPedidoAgente) FabricaEntidad.getInstancia().obtenerEntidad(EstadoPedido.class);

        estadoPedido.setOid("1");
        estadoPedido.setCodEstadoPedido(112);
        estadoPedido.setNombreEstadoPedido("Pendiente");
        FachadaPersistencia.getInstancia().guardar(EstadoPedido.class, estadoPedido);

        estadoPedido.setOid("2");
        estadoPedido.setCodEstadoPedido(113);
        estadoPedido.setNombreEstadoPedido("En Proceso");
        FachadaPersistencia.getInstancia().guardar(EstadoPedido.class, estadoPedido);

        estadoPedido.setOid("3");
        estadoPedido.setCodEstadoPedido(114);
        estadoPedido.setNombreEstadoPedido("Entregado");
        FachadaPersistencia.getInstancia().guardar(EstadoPedido.class, estadoPedido);
//Confirmado
        estadoPedido.setOid("4");
        estadoPedido.setCodEstadoPedido(115);
        estadoPedido.setNombreEstadoPedido("Facturado");
        FachadaPersistencia.getInstancia().guardar(EstadoPedido.class, estadoPedido);

//--
        ProductoAgente producto;
        producto = (ProductoAgente) FabricaEntidad.getInstancia().obtenerEntidad(Producto.class);

        HistoricoPrecioAgente historicoPrecio;
        historicoPrecio = (HistoricoPrecioAgente) FabricaEntidad.getInstancia().obtenerEntidad(HistoricoPrecio.class);


        producto.setOid("1");
        producto.setCodProducto(16580);
        producto.setMarca("Bagley");
        producto.setNombreProducto("Polvoritas");
        producto.setDescripcionProducto("Gallegas dulces de 200Gr");
        FachadaPersistencia.getInstancia().guardar(Producto.class, producto);

        historicoPrecio.setOid("1");
        historicoPrecio.setOidProducto("1");
        historicoPrecio.setFechaDesde(obtenerFecha(01, 07, 2011));
        historicoPrecio.setFechaDesde(obtenerFecha(31, 12, 2011));
        historicoPrecio.setPrecio(5.5);
        FachadaPersistencia.getInstancia().guardar(HistoricoPrecio.class, historicoPrecio);


//--

        producto.setOid("2");
        producto.setCodProducto(16581);
        producto.setMarca("Arcor");
        producto.setNombreProducto("Cereal Mix");
        producto.setDescripcionProducto("Galletas con Avena");
        FachadaPersistencia.getInstancia().guardar(Producto.class, producto);

        historicoPrecio.setOid("2");
        historicoPrecio.setOidProducto("2");
        historicoPrecio.setFechaDesde(obtenerFecha(01, 07, 2011));
        historicoPrecio.setFechaDesde(obtenerFecha(31, 12, 2011));
        historicoPrecio.setPrecio(6);
        FachadaPersistencia.getInstancia().guardar(HistoricoPrecio.class, historicoPrecio);

//--

        producto.setOid("3");
        producto.setCodProducto(16582);
        producto.setMarca("Gramix");
        producto.setNombreProducto("Frutigramn");
        producto.setDescripcionProducto("Galletas con Chocolate");
        FachadaPersistencia.getInstancia().guardar(Producto.class, producto);

        historicoPrecio.setOid("3");
        historicoPrecio.setOidProducto("3");
        historicoPrecio.setFechaDesde(obtenerFecha(01, 07, 2011));
        historicoPrecio.setFechaDesde(obtenerFecha(31, 12, 2011));
        historicoPrecio.setPrecio(8);
        FachadaPersistencia.getInstancia().guardar(HistoricoPrecio.class, historicoPrecio);


//--

        producto.setOid("4");
        producto.setCodProducto(16584);
        producto.setMarca("Villavicencio");
        producto.setNombreProducto("Agua Mineral");
        producto.setDescripcionProducto("sin Gas");
        FachadaPersistencia.getInstancia().guardar(Producto.class, producto);

        historicoPrecio.setOid("4");
        historicoPrecio.setOidProducto("4");
        historicoPrecio.setFechaDesde(obtenerFecha(01, 07, 2011));
        historicoPrecio.setFechaDesde(obtenerFecha(31, 12, 2011));
        historicoPrecio.setPrecio(7.5);
        FachadaPersistencia.getInstancia().guardar(HistoricoPrecio.class, historicoPrecio);

    }

    public enum DiaDeLaSemana {

        Domingo(1), Lunes(2), Martes(3), Miercoles(4), Jueves(5), Viernes(6), Sabado(7);
        private int nroDia;

        private DiaDeLaSemana(int dia) {
            this.nroDia = dia;
        }

        public int getNroDia() {
            return nroDia;
        }
    }

    //    public static void prueba(DiaDeLaSemana dia){
//        Calendar cal = new GregorianCalendar();
//        cal.setTime(new Date());
//        int nroDiaSemana = cal.get(Calendar.DAY_OF_WEEK);
//        
//        System.out.println("nro dia semana: " + nroDiaSemana);
//        
//        System.out.println("dia parametro: "+ dia.getNroDia());
//    }
    public static int obtenerNroPedido() {
        List<Configuracion> configs = FachadaPersistencia.getInstancia().buscar(Configuracion.class, null);
        Configuracion conf;
        int resul;
        if (configs == null || configs.isEmpty()) {
            conf = new Configuracion();
            conf.setUltimoNroPedido(1000);
            resul = 1000;
            FachadaPersistencia.getInstancia().guardar(Configuracion.class, conf);
        } else {
            resul = configs.get(0).getUltimoNroPedido() + 1;
            conf = configs.get(0);
            conf.setUltimoNroPedido(resul);
            FachadaPersistencia.getInstancia().actualizar(Configuracion.class, conf);
        }
        return resul;
    }
    
    public static Date sumarMesesAFecha(Date fecha, int cantMeses) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(fecha);
        cal.add(Calendar.MONTH, cantMeses);
        return cal.getTime();
    }
    
    public static  String verificarOIDvacio(String oid)
    {
        String cad;
        
        if(oid==null || oid.isEmpty() )
        {
           cad =  ", " +  null;
           
        }
        else
        { 
           cad = ", '"  +  oid +"'";
        }
            
    
        return  cad;
    }
    
}
